package com.yy.yunpan.user.service;

import com.yy.yunpan.user.entity.User;

/**
 * 用户服务接口
 *
 * @author YY
 * @since 2025-10-01
 */
public interface UserService {

    /**
     * 用户注册
     *
     * @param email      邮箱
     * @param password   密码
     * @param nickname   昵称
     * @param verifyCode 验证码
     * @return 注册结果
     */
    User register(String email, String password, String nickname, String verifyCode);

    /**
     * 用户登录
     *
     * @param email    邮箱
     * @param password 密码
     * @return 用户信息
     */
    User login(String email, String password);

    /**
     * 发送邮箱验证码
     *
     * @param email 邮箱
     * @param type  类型（register:注册, reset:重置密码）
     */
    void sendVerifyCode(String email, String type);

    /**
     * 验证邮箱验证码
     *
     * @param email      邮箱
     * @param verifyCode 验证码
     * @return 是否有效
     */
    boolean verifyCode(String email, String verifyCode);

    /**
     * 根据ID获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    User getUserById(Long userId);

    /**
     * 根据邮箱获取用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    User getUserByEmail(String email);

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return 更新后的用户信息
     */
    User updateUser(User user);

    /**
     * 修改密码
     *
     * @param userId      用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void changePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 重置密码
     *
     * @param email      邮箱
     * @param newPassword 新密码
     * @param verifyCode 验证码
     */
    void resetPassword(String email, String newPassword, String verifyCode);
}